/*
 * GbtCore.h
 *
 *  Created on: 2018年5月31日
 *      Author: zhengboyuan
 */

#ifndef GBTCORE_H_
#define GBTCORE_H_

#include "GbtType.h"


#ifdef __cplusplus
extern "C" {
#endif
///////////////////////////////////////////////////////////////////


DLLEXPORT void gbtCmdInit(GBT_Command* cmd, int type, int sn, const char* cmdType, const char* deviceID);

DLLEXPORT void gbtCmdMakeResponse(const GBT_Command* request, GBT_Command* response);

DLLEXPORT size_t gbtCmdMakeErrorResult(const GBT_Command* request, GBT_Command* response, char* buf, size_t size);

DLLEXPORT BOOL gbtCmdIsCmdType(const GBT_Command* cmd, const char* cmdType);


DLLEXPORT BOOL gbtAlarmMethodParse(GBT_AlarmMethods* methods, const char* str, size_t size);

DLLEXPORT size_t gbtAlarmMethodMake(const GBT_AlarmMethods* methods, char* str, size_t size);

DLLEXPORT size_t gbtAlarmMethodAdd(GBT_AlarmMethod alarmMethod, char* str, size_t maxSize);

DLLEXPORT char gbtAlarmMethodGet(GBT_AlarmMethod alarmMethod);


DLLEXPORT size_t gbtAlarmTypeMake(GBT_AlarmType type, char* str, size_t maxSize);


DLLEXPORT GBT_DeviceType gbtCodeParseDeviceType(const char* deviceID, size_t size);

/**
 * 根据父设备ID和设备类型生成子设备ID.
 * 将统一编码序号中开始的2个数字用来表示子设备序号.
 * @param deviceID  设备ID
 * @param size      设备ID长度
 * @param typeCode  类型码
 * @param index     子设备需要， 从0开始, 最大值为99.
 * @param dest      子设备ID
 * @param maxSize   最大长度
 * @return 子设备ID长度, <= 0表示失败.
 */
DLLEXPORT int gbtCodeMakeSubDevice(const char* deviceID, size_t size, const char* typeCode, int index, char* dest, size_t maxSize);

/**
 * 根据父设备ID生成对讲设备ID
 * @param deviceID
 * @param index
 * @param dest
 * @param maxSize
 * @return 子设备ID长度.
 */
DLLEXPORT int gbtCodeMakeSubTalkDevice(const char* deviceID, int index, char* dest, size_t maxSize);

/**
 * 根据父设备ID生成编码器ID
 * @param deviceID
 * @param index
 * @param dest
 * @param maxSize
 * @return 子设备ID长度.
 */
DLLEXPORT int gbtCodeMakeSubEncoderDevice(const char* deviceID, int index, char* dest, size_t maxSize);

/**
 * 根据父设备ID生成报警设备ID
 * @param deviceID
 * @param index
 * @param dest
 * @param maxSize
 * @return 子设备ID长度.
 */
DLLEXPORT int gbtCodeMakeSubAlarmDevice(const char* deviceID, int index, char* dest, size_t maxSize);


///////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif


#endif /* GBTCORE_H_ */
